package busterminalweb.action.user;

import busterminal.exception.BusinessException;
import busterminal.services.ServiceLocator;
import busterminalweb.action.Action;
import busterminalweb.action.ActionResult;
import busterminalweb.authorization.Authorization;
import busterminalweb.authorization.User;
import busterminalweb.authorization.service.Role;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Сохранить пользователя
 */
public class SaveUserAction implements Action {

    /**
     * Выполнить действие
     * @param request запрос
     * @param response ответ
     * @return страница, которой нужно передать управление
     */
    @Override
    public ActionResult execute(HttpServletRequest request, HttpServletResponse response) {
        if (request.getParameter("saveButton") != null) {
            int id = Integer.parseInt(request.getParameter("id"));
            User user = (id == 0) ? new User() : ServiceLocator.getService(Authorization.class).read(id);
            
            // load data from request
            if (request.getParameter("userName") != null && !request.getParameter("userName").isEmpty()) {
                user.setName(request.getParameter("userName"));
            } else {
                throw new BusinessException("User name should be not empty");
            }

            if (request.getParameter("userRole") != null && !request.getParameter("userRole").isEmpty()) {
                user.setRole(Role.valueOf(request.getParameter("userRole")));
            } else {
                throw new BusinessException("It is necessary to define user role");
            }

            if (request.getParameter("login") != null && !request.getParameter("login").isEmpty()) {
                user.setLogin(request.getParameter("login"));
            } else {
                throw new BusinessException("Login should be not empty");
            }

            if (request.getParameter("password") != null && !request.getParameter("password").isEmpty()) {
                user.setPassword(request.getParameter("password"));
            } else {
                throw new BusinessException("Password should be not empty");
            }

            Authorization authorization = ServiceLocator.getService(Authorization.class);
            if (id != 0) {
                authorization.update(user);
            } else {
                authorization.createNewUser(user);
            }
        }

        //список, который нужно загрузить при возврате на главную страницу
        request.getSession().setAttribute("showPage", "user-list");

        //main - это action, который никак сервлетом не обрабатывается,
        //т.е. открывается главная страница
        return ActionResult.redirect("main");        
    }

    /**
     * Получить имя действия
     * @return имя действия
     */
    @Override
    public String getName() {
        return "user.save";
    }
    
}
